home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1996 April
/
CHIP 1996 aprilis (CD06).zip
/
CHIP_CD06.ISO
/
hypertxt.arj
/
9408
/
SOURCER.CD
< prev
next >
Wrap
Text File
|
1994-11-23
|
18KB
|
313 lines
@VA Sourcer 5.12 és a Windows Source 2.04@N
@VDisassembler Windowshoz@N
Mindenkit érhet ""baleset", még egy programozót is. Nem
kell valami csontszaggató szörnyûségre gondolni, elég egy
meggondolatlanul kiadott DEL parancs is, máris oda az
értékes forráskód.
Egy programozó ismerôsöm nemrég DES-titkosítást törô
programot keresett -- sikertelenül. Néhány évvel ezelôtt
egy jól sikerült fejlesztés végén az értékes
programforrásokat egy jelszóvédett ZIP file-ba rejtette a
kíváncsi kollégák elôl, majd az egészet félretette szebb
idôkre. A továbbfejlesztés ideje elérkezett, a jelszó
elfelejtôdött. Nincs mit tenni, a programot vissza kell
fejteni.
Rövidebb programokat akármilyen debuggerrel is vissza lehet
gombolyítani, nagyobbakat már csak céleszközzel --
disassemblerrel lehet. A V Communications, Inc. termékét a
Sourcert a programozók már régóta ismerik, az új, 5.12
verziót mégis érdemes bemutatni néhány fontos újítása
miatt.
A Sourcer .COM, .EXE és berendezés-meghajtó programok
teljes vagy meghatározott részének, illetve gépünk egy
magadott memóriaterületének visszafordítására képes.
Bármilyen processzor kódját képes visszafejteni a 8086-tól
a Pentiumig a valós és a védett üzemmódban. Ismeri az Intel
processzorok nem publikált utasításait is. A
visszafordítható program mérete 300 Kbyte, de EMS támogatás
esetén jóval nagyobb is lehet.
A fordítás eredménye választásunktól függôen vagy egy lista
(.LST), vagy egy assembler forrásfile-ba (.ASM) kerülhet.
Ez utóbbi kiegészíthetô, javítható, majd újrafordítható. A
lista változat nem fordítható le újra, azonban sokkal
érthetôbb. A lista változat esetén kérhetünk teljes vagy
részleges kereszthivatkozási listát, vagyis azt, hogy a
Sourcer minden változóhoz, ugrási címkéhez írja oda
megjegyzésként, hogy hol hivatkoztak rá. Részleges lista
esetén kizárhatjuk a kereszthivatkozási listából a
szubrutinok belépési pontjait, vagy az ugrási címkéket.
Emellett a listafile-unk végére kérhetünk I/O használati
táblázatot (output synopsis) is. Ez a táblázat felsorolja,
hogy a visszafejtett program milyen megszakításokat, DOS
funkciókat és I/O portokat használ. Ismeretlen vagy
vírusgyanús program mûködésérôl már ez a kis táblázat is
elegendô kezdeti információt adhat.
A lista formátumot az LST2ASM segédprogrammal assembler
formátumúvá alakíthatjuk, így hosszabb programok
idôigényes, másodszori visszafordítása elkerülhetô.
Kiválaszthatjuk, mely assembler formátumnak megfelelô
eredményt kérünk. A felkínált lehetôségek: a MASM a 6.1-es
verzióig, a Turbo Assembler (TASM) a 3.2-es verzióig,
illetve az OPTASM formátuma. Az új Sourcer verzió nem
elégszik meg a kimeneti formátum beállításával, megadhatjuk
azt is, hogy egy esetleges újrafordítás után létrejött
program mennyire hasonlítson az eredetire. A
visszafordítást lehet funkcionálisan, méretre vagy byte-ra
azonosan kérni. E látszólag értelmetlen funkciónak akkor
van értelme, ha az újrafordítást végzô assembler fordító
felesleges NOP-okat rak be az ugróutasítások után a kódba.
A keletkezô elcsúszások és az esetleges konstans értéknek
visszafordított adatcímek miatt keletkezô titokzatos
programhibákat lehet megelôzni a helyes paraméterezéssel.
Sok program a lebegôpontos koprocesszor hívásokat -- annak
hiányában -- szoftvermegszakításokkal emulálja (INT 34h --
INT 3Fh). Kérésre ezeket az interruptokat a megfelelô
utasításokká fordíthatjuk vissza. Régi, koprocesszort nem
használó, de azt emuláló programjainkat jelentôsen
felgyorsíthatjuk a koprocesszor beszerzése után.
A visszafejtési eljárás 2-9 menetben zajlik. 2-5 menet
esetén eléggé nyers listát kapunk, nem sokkal bôvebbet a
Debugból kicsikarhatónál. (Például 2 menet esetén csak az
ugrási címek jelennek meg szimbolikusan, a változóké nem.)
6-9 menetes visszafordításkor már rendelkezésünkre áll a
kereszthivatkozási lista, valamint az indexelt indirekt
vezérlésátadások ugrótábláit is tisztességesen felderíti a
program, és azokat megfelelô @KDW címke,címke,...@N
táblázatokká alakítja.
A Sourcer fô elônye a különbözô disassemblerekhez képest
az, hogy nemcsak az adat- és ugrási címhivatkozásokat
analizálja, hanem az egész program mûködését figyeli. A DS
és ES szegmensregiszter programon belüli értékét
nyilvántartja, így az adathivatkozásoknál mindig láthatjuk
a használt változó szegmenshelyes címét. Több szegmensbôl
álló programok esetén a Sourcer képes a szegmenshatárokat
felderíteni, azoknak szimbolikus nevet adni.
Hasonló alapossággal jár el a Sourcer az interrupt belépési
pontok felderítésében is. Ha érzékeli, hogy a program
magára irányít egy interrupt vektort, akkor az így
megcímzett interrupt rutin be- és kilépési pontjainál
jelzi, hogy a rutin mely megszakítást valósítja meg.
A saját kódját (például egy JMP utasítás ugrási címét)
átíró programot kérésünkre kódfolytonosan is visszafejtheti
a Sourcer, de a ""disznóság" láthatóbbá tétele végett
címkézett adatmezô (DB n,n,n...) is kerülhet az elkészült
listába.
Kiválaszthatjuk, hogy kódként vagy adatterületként
fordítsa-e vissza a Sourcer azokat a területeket, melyekre
látszólag sehonnan sem történt hivatkozás. Ezzel a
módszerrel azokat a kódrészeket is visszanyerhetjük, amik
""szabálytalan" vezérlásátadással kerülnek meghívásra.
(Például PUSH SEG_RUT -- PUSH OFFSSET_RUT -- RETF.)
@VMagyarázó megjegyzések@N
A Sourcer másik nagy erôssége az, hogy megjegyzéseket
fûzhet a visszafejtett programhoz, akár annak minden
sorához is. Az alábbi fajták közül választhatunk egyet vagy
többet:
@V*@N Adat címe, értéke. Az adatra hivatkozó utasítás mellé
megkapjuk az adat szegmenshelyes címét (lásd feljebb),
valamint az adat programbetöltéskori kezdôértékét.
@V*@N Kereszthivatkozási lista (lásd feljebb).
@V*@N Interrupt, DOS-funkció és I/O port használat esetén
azt tudhatjuk meg, hogy az adott megszakítás vagy
portkezelés mit valósít meg. Többfunkciós
szoftver-megszakítások (például INT 10H, INT 21H) esetén az
aktuális alfunkciót is felismeri. Kellemes meglepetés volt
számomra az, hogy a legtöbb nem publikált interruptról és
DOS-funkcióról is információt ad a Sourcer. Az újabb
Sourcer változatok a legfontosabb DOS kiegészítéseket is
ismerik, például a DPMI és MSCDEX hívásokat.
@V*@N Egyebek: például a feltételes ugró utasítások
feltételének szöveges kiírása.
Elmondhatjuk, hogy a Sourcer kódvisszafejtési hatékonysága
megegyezik egy, már nem kezdô, de nem is túlzottan
gyakorlott assembler programozóéval. Az eredményül kapott
file kisebb hibáinak kijavításához, saját megjegyzések
hozzáfûzéséhez, valamint a nem túl beszédes címkenevek
átszerkesztéséhez hozzákezdhetünk magunk is, de jobb ezt is
a Sourcerre bízni. A Sourcer ugyanis képes két külsô file
segítségével tökéletes, az eredeti assembler
forrásszöveggel összemérhetô, vagy azt felül is múló
forrásanyag készítésére.
Az egyik ilyen file a visszafejtést vezérlô úgynevezett
definíciós file (.DEF). Ez egy bármilyen szövegszerkesztôbe
betölthetô ASCII file, ami képes mindazt az információt
megadni a Sourcer számára, amit a menükön belül nekünk
kellene beütnünk. Azaz az input és output file-neveket, az
analízis opciókat, a használandó megjegyzések típusát,
valamint a készítendô forrásfile-ra vonatkozó formai
követelményeket. A definíciós file fô szerepe azonban abban
van, hogy egy korábbi visszafejtésbôl okulva
rákényszerítsük a Sourcert az általunk kigondolt
szimbólumnevek, megjegyzések és szegmenshatárok
használatára.
Alkalmunk van átdefiniálni azokat a programterületeket,
amelyeket a Sourcer elôzôleg hibásan fejtett vissza (kódot
adatként vagy viszont). Meg kell adnunk a programnak, hogy
helyesen mit kell tennie. A saját szimbólumnevek és
megjegyzések használata segíti a program megértését,
javítja az olvashatóságát. Az általunk megadott
segment:offset címû szubrutinoknak, címkéknek és
változóknak beszédes neveket adhatunk, meghatározhatjuk
azokat a megjegyzéseket is, amelyeket ezen helyek mellé
kell írnia a Sourcernek, de megadhatjuk azokat a
megjegyzéseket is, melyeket az így definiált szimbólumokra
hivatkozó sorokban szeretnénk látni. Az így meghatározott
megjegyzések maximum 64 karakter hosszúak lehetnek. Ha ez
kevésnek bizony, akkor van szükség a megjegyzésfile-okra.
Egy ilyen, REM kiterjesztésû file több, sorszámokkal
ellátott, akár több sorban is folytatódó megjegyzést
tartalmazhat. A Sourcer programlemez tartalmaz több .DEF és
.REM file-t, amiket kedvünkre felhasználhatunk,
átszerkeszthetünk. Ha a Sourcernek nem adunk meg kezdeti
definíciós file-okat, akkor a visszafordítás végén generál
egyet a menüben beállított paraméterek alpján, így egy
másodszori, hibajavító, commentezô fordításhoz már
rendelkezésünkre áll a definíciós állomány gerince.
@VA Windows kiegészítés@N
A Sourcernek kétfajta kiegészítôje van: a BIOS Preprocessor
és a Windows Source. Mindkét kiegészítés preprocesszorként
mûködik, azaz a Sourcer számára készít egy definíciós
file-t, ami alapján az képes a visszafejtést elkészíteni.
Az elôbbi a PC-kben található ROM-ok, elsôsorban a BIOS és
a VGA kártya vezérlôprogramjainak visszafejtésére szolgál.
Jól használható program, csak ritkán van szükség rá; a
ROM-ok tartalmára nem túl gyakran van szüksége egy
programozónak, ezek, valamint a hozzájuk tartozó RAM
adatterületek a PC-k talán legjobban dokumentált részei. A
Windows Source az 5.0-ás Sourcertôl kezdve használható,
megjelenése régi égetô hiányt szüntetett meg.
A Windows Source jelenleg a Windows 3.1 és a Windows for
Workgroups 3.1 programjait képes visszafejteni, a WIN 3.11
és NT applikációkat nem. Segítségével a DOS végrehajtható
file-jain túl az alábbi programtípusok is értelmezhetôek
lesznek a Sourcer számára:
@V*@N 16 bites New EXE (NE) felépítésû programok: ilyen a
legtöbb Windows program, a DLL-ek, valamint az OS/2 néhány
berendezés-meghajtó programja és a PharLap 286/DOS
Extendere is.
@V*@N 32 bites Linear Executable (LE) programok: ilyen
például a védett módú Windows DPMI hostja.
@V*@N VxD meghajtók, azaz a védett módú, 32 bites Windows
kernelt a valós módban futó berendezés-meghajtó
programjaihoz (video, billentyûzet stb.) kapcsoló interface
programok.
És amit nem képes kibontani: P-kódot és a Visual Basic
FRM-jeit tartalmazó programok. Ezek a formátumok egy belsô
interpretter segítségével futnak, ezért nem lehet ôket
értelmes assembly utasítássorozatokká alakítani. P-kódot a
nagy Microsoft-programok, például az Excel és a Winword
tartalmaznak, a Visual Basicból fordított programok belsô
FRM-jeit a Resdump programmal lehet megtalálni.
@VA visszafordítás eredménye@N
Itt is csak egy assembly listát kapunk eredményül, akárcsak
a DOS programok esetében. A Windows programok a Windows
kernelt, illetve a DLL-ekben lévô rutinjaikat hosszú (32
bites) szubrutinhívásokkal érik el. Mivel a programfordítás
idejében ezek a címek még ismeretlenek, ezért az .EXE és
.DLL file-okba csak egy jól azonosítható szerkesztési
(linker) információ kerül. A hivatkozások feloldása a
program betöltésének ideje alatt történik meg. Az ilyen
úgynevezett New .EXE file-szerkezet sokkal egyértelmûbben
visszafejthetô mint a DOS-os társaiké.
Az ábrán egy visszafejtés kis részlete látható. A Windows
API hívások jól azonosíthatók, a hívott rutinoknak átadott
paraméterek (a szubrutinhívás elôtt verembe helyezett
adatok) nevei sajnos nem szerepelnek. Ahol konstans érték
kerül a veremre, ott a WINDOWS.H-ban deklarált szimbolikus
név megjelenítése is szükséges lenne. Mivel a Sourcer a
DOS/BIOS hívásoknál képes az átadott paraméterekrôl
megmondani, hogy ki-kicsoda, ezért a Windows változat már
használható, de fejlesztésre szorul. Az alkotók a
kézikönyvben hosszú magyarázkodásba is bonyolódnak a
témáról, sok siker nélkül. A következô verzió remélhetôleg
már több magyarázó megjegyzést fog tartalmazni.
Az assembly visszafejtésen túl a Windows programok fôbb
erôforrásait is képes ""kirobbantani" a Sourcer, azaz a
stringeket, menüket és a beállítóablakokat. A .BMP és .ICO
file-okat sajnos nem. A szöveges erôforrások
módosíthatósága fôleg a magyarítás miatt lényeges: nem
minden feliratot lehet hexa-editorral, helyben kicserélni a
magyar szavak hosszabb volta miatt. Ilyenkor csak a
szöveges erôforrás és a program újrafordítása lehet csak a
megoldás.
@KBata László@N
@VTovábbi információk:@N
KeSzo Kft., 1055 Bp. Falk Miksa u. 6.; tel./fax: 132-8717, 111-8268
Sourcer 5.12: 17800 Ft + áfa
Sourcer és Windows Source: 24000 Ft + áfa
@<9408\SR1.GIF> A Sourcer bejelentkezô képernyôje@N
@<9408\SR2.GIF> Az analízis opciók menüje@N
┌──────────────────────────────────────────────────────────┐
│ @VEgy visszafejtett Windows programrészlet@N │▒
│ │▒
│LOC_0103: │▒
│ PUSH WORD PTR [BP-8 │▒
│ MOV AX,1 │▒
│ PUSH AX │▒
│ CALL FAR PTR EnableWindow │▒
│LOC_0104: │▒
│ PUSH WORD PTR [BP+0EH] │▒
│ MOV AX,4BAH │▒
│ PUSH AX │▒
│ MOV AX,4D8H │▒
│ PUSH AX │▒
│ PUSH DATA_0080 │▒
│ CALL FAR PTR CheckRadioButton │▒
│ │▒
│ │▒
│ │▒
│ │▒
│ │▒
│ │▒
│ │▒
│ │▒
│ │▒
│ │▒
└──────────────────────────────────────────────────────────┘▒
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒